#ifndef HEADER_H
#define HEADER_H

#include <filesystem>
#include <memory>

#define RESET   "\033[0m"
#define BLACK   "\033[30m"      /* Black */
#define RED     "\033[31m"      /* Red */
#define GREEN   "\033[32m"      /* Green */
#define YELLOW  "\033[33m"      /* Yellow */
#define BLUE    "\033[34m"      /* Blue */
#define MAGENTA "\033[35m"      /* Magenta */
#define CYAN    "\033[36m"      /* Cyan */
#define WHITE   "\033[37m"      /* White */
#define BOLDBLACK   "\033[1m\033[30m"      /* Bold Black */
#define BOLDRED     "\033[1m\033[31m"      /* Bold Red */
#define BOLDGREEN   "\033[1m\033[32m"      /* Bold Green */
#define BOLDYELLOW  "\033[1m\033[33m"      /* Bold Yellow */
#define BOLDBLUE    "\033[1m\033[34m"      /* Bold Blue */
#define BOLDMAGENTA "\033[1m\033[35m"      /* Bold Magenta */
#define BOLDCYAN    "\033[1m\033[36m"      /* Bold Cyan */
#define BOLDWHITE   "\033[1m\033[37m"      /* Bold White */
#define RESET   "\033[0m"

#include <iostream>
#include <thread>
#define DEBUG(X) std::cout << GREEN <<"("<< __FUNCTION__  <<"<"<< __LINE__<<">" << "[" << std::this_thread::get_id()  << "]" <<") " << X << RESET <<  std::endl
#define DEBUG_STUB std::cout << BLUE<<"("<< __FUNCTION__  <<"<"<< __LINE__<<">"<<") " << "[" << std::this_thread::get_id()  << "]" << RESET << std::endl

// test interop samples
int test_interop_samples(int argc, char* argv[]);
int test_IopAcisConfigurationImport(int argc, char* argv[]);
int test_IopAcisDocumentInfo(int argc, char* argv[]);
int test_IopAcisFastBRep(int argc, char* argv[]);
int test_IopAcisImportExport(int argc, char* argv[]);
int test_IopAcisImportMP(int argc, char* argv[]);
int test_IopAcisMfg(int argc, char* argv[]);
int test_IopAcisMiscData(int argc, char* argv[]);
int test_IopAcisPartExport(int argc, char* argv[]);
int test_IopAcisPMI(int argc, char* argv[]);
int test_IopAcisPolicyOptions(int argc, char* argv[]);
int test_IopAcisPS(int argc, char* argv[]);
int test_IopAcisRepLinking(int argc, char* argv[]);
int test_IopAcisVisualization(int argc, char* argv[]);

// test amcax interop
void test_amcax_interop(const std::filesystem::path data_folder, const std::string &type);

void test_read_info_middle_format() ;

#endif // HEADER_H